import scrapy
from scrapy_04_dangdang.items import Scrapy04DangdangItem

class DangSpider(scrapy.Spider):
    name = 'dang'

    #(1)修改allowed_domains
    allowed_domains = ['category.dangdang.com']
    start_urls = ['http://category.dangdang.com/cp01.01.07.00.00.00.html']

    #观察其他页的url
    # 第一页：http://category.dangdang.com/cp01.01.07.00.00.00.html
    # 第二页：http://category.dangdang.com/pg2-cp01.01.07.00.00.00.html
    # 第三页：http://category.dangdang.com/pg3-cp01.01.07.00.00.00.html
    #为例获取每一页的url，我们需要拼接,第一页我们不用管了
    base_url='http://category.dangdang.com/pg'
    page=1


    def parse(self, response):
        print('======================================================')
        #src://ul[@id="component_59"]/li/a/img/@src
        #alt://ul[@id="component_59"]/li/a/img/@alt
        # price://ul[@id="component_59"]/li/p/span[@class="search_now_price"]

        #三个都是在li标签下
        list=response.xpath('//ul[@id="component_59"]/li')

        # 便利一下list看看xpath语句是否成功
        # for i in list :
        #     print(i)

        #

        for li in list:

            src=li.xpath('./a/img/@data-original').extract_first()

            alt=li.xpath('./a/img/@alt').extract_first()
            price=li.xpath('./p/span[@class="search_now_price"]/text()').extract_first()

            #没有进行extract_first()时先输出一下验证看看得到的信息
            #此时我们发现每一张图片的src都一样（说明遇到了懒加载），
            # 我们需要再去看页面代码查看src，我们不能只定位第一张图片，要往下看，我们发现
            # data-orginal的地址与src一样，这里我们不用src了，而且我们发现第一张图片没有data-original

            # 第一张图片和其他的图片的标签的属性是不一样的
            # 第一张图片的src是可以使用的  其他的图片的地址是data-original
            # 那么第一张我们仍用src
            if src :    #意思是如果存在data-original
                src=src
            else :
                #对于第一张
                src=li.xpath('./a/img/@src').extract_first()


            # print(src,alt,price)
            book=Scrapy04DangdangItem(src=src,alt=alt,price=price)
            #把书book给管道下载
            yield book
            #我们去打开管道并且补全管道的方法


            # 观察其他页的url
            # 每一页的爬取的业务逻辑全都是一样的，所以我们只需要将执行的那个页的请求再次调用parse方法
            # 就可以了
            # 第一页：http://category.dangdang.com/cp01.01.07.00.00.00.html
            # 第二页：http://category.dangdang.com/pg2-cp01.01.07.00.00.00.html
            # 第三页：http://category.dangdang.com/pg3-cp01.01.07.00.00.00.html
            if self.page<10 :  #这里的10就是你需要爬取的前几页
                self.page=self.page+1
                url=self.base_url+str(self.page)+'-cp01.01.07.00.00.00.html'
                #此时我们重新调用parse
                #parse后面不加括号
                yield scrapy.Request(url=url,callback=self.parse)






